package br.unidocs.web.bean;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import org.apache.log4j.Logger;

import br.unidocs.exceptions.UsuarioInvalidoException;
import br.unidocs.modelo.entidade.Admin;
import br.unidocs.modelo.entidade.Usuario;
import br.unidocs.servico.UsuarioEJB;

public class LoginBackingBean {
	private Usuario usuarioLogado = null;

	private Logger log = Logger.getLogger(LoginBackingBean.class.getName());

	private String login;
	private String senha;

	@EJB
	private UsuarioEJB usuarioEjb;

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public String atualizaCadastro() {

		usuarioEjb.atualizaUsuario(usuarioLogado);
		FacesContext ctx = FacesContext.getCurrentInstance();
		ctx.addMessage(null, new FacesMessage("Cadastro alterado com sucesso."));
		return "postback";
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String logaUsuario() {
		log.debug("Iniciando método logaUsuario");
		try {
			log.info("Logando usuário: " + login);
			usuarioLogado = usuarioEjb.validaUsuario(login, senha);

			// seta as configurações do usuário
			FacesContext facesCtx = FacesContext.getCurrentInstance();
			ConfiguracaoUsuarioBackingBean configBean = facesCtx
					.getApplication().evaluateExpressionGet(facesCtx,
							"#{configuracaoBean}",
							ConfiguracaoUsuarioBackingBean.class);
			configBean.setCssSelecionado(usuarioLogado.getCssEscolhido());

		} catch (UsuarioInvalidoException e) {
			FacesContext ctx = FacesContext.getCurrentInstance();
			ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,
					"Usuario ou senha invalida!", null));
			log.error(e);
		}
		login = null;
		senha = null;
		log.debug("Finalizando o método logaUsuario");
		return "postback";
	}

	public String logout() {
		usuarioLogado = null;
		return "index";
	}

	public Boolean getAdminLogged() {
		if (usuarioLogado != null && usuarioLogado instanceof Admin) {
			return true;
		}
		return false;
	}

	public Boolean getNormalUserLogged() {
		if (usuarioLogado != null && !(usuarioLogado instanceof Admin)) {
			return true;
		}
		return false;
	}

}
